<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    {
        // 1- async函数如何定义
        async function fn(){

        }
        const fn2 = async function(){

        };
        setTimeout(async function(){

        });
        const fn3 = async ()=>{

        };
        const obj = {
            async fn(){

            },
            fn2:async function(){

            },
            fn3:async ()=>{

            }
        }
    }
    {
        // 2- async函数与普通函数的区别
        // 2-1:返回值不同，async函数返回的是一个新的Promise实例
        //     实例的状态会受返回值的影响：
        //         如果返回的是一个非Promise实例，那么状态为成功，值为返回值
        //         如果返回的是一个Promise实例，那么状态以及值与Promise实例相同
        //         如果有异常，那么状态为失败，值为异常信息
        // 2-2:场景不同，async函数往往要与await表达式结合使用。

        // 3- await表达式。
        //    await表达式的结果与await右侧的内容相关。
        //    如果await右侧是一个非Promise实例，那么结果即为右侧的值
        //    如果await右侧是一个Promise实例，根据Promise的状态决定表达式的结果：
        //          成功：m的值为成功值
        //          失败：抛出异常信息
        //          pending:不会向下执行。
        async function fn(){
            const m = await new Promise(()=>{})
            console.log("m",m);
        }
        const result = fn();

        console.log("result",result);
    }
</script>
</html>